package com.tutu.model;

import android.content.Context;
import android.content.Intent;

import androidx.localbroadcastmanager.content.LocalBroadcastManager;

import com.hyphenate.EMContactListener;
import com.hyphenate.chat.EMClient;
import com.tutu.constant.ContactConst;
import com.tutu.model.bean.InvitationInfo;
import com.tutu.model.bean.UserInfo;
import com.tutu.utils.SpUtils;

/**
 * @author 谢辉
 * @Classname EventListener
 * @Description 全局事件监听类
 * @Date 2020/10/16 17:00
 */
public class EventListener {

    private Context mContext;
    private LocalBroadcastManager mLBM;

    public EventListener(Context context){
        mContext = context;

        // 创建一个发送广播的管理者对象
        mLBM = LocalBroadcastManager.getInstance(mContext);

        // 注册联系人变化的监听
        EMClient.getInstance().contactManager().setContactListener(eMContactListener);
    }

    private EMContactListener eMContactListener = new EMContactListener() {

        // 联系人增加后执行的方法
        @Override
        public void onContactAdded(String hxid) {
            UserInfo userInfo = new UserInfo(hxid);
            // 数据库更新
            Model.getInstance().getDbManager()
                    .getContactTableDao().saveContact(userInfo,true);

            // 发送联系人变化的广播
            mLBM.sendBroadcast(new Intent(ContactConst.CONTACT_CHANGED));

        }

        // 联系人删除后执行的方法
        @Override
        public void onContactDeleted(String hxid) {
            // 本地数据库更新
            Model.getInstance().getDbManager()
                    .getContactTableDao().deleteContactByHxId(hxid);
            // 更新邀请信息
            Model.getInstance().getDbManager()
                    .getInviteTableDao().removeInvitation(hxid);

            // 发送联系人变化的广播
            mLBM.sendBroadcast(new Intent(ContactConst.CONTACT_CHANGED));

        }

        // 接受到联系人的新邀请
        @Override
        public void onContactInvited(String hxid, String reason) {
            // 创建邀请信息
            InvitationInfo invitationInfo = new InvitationInfo();
            UserInfo userInfo = new UserInfo(hxid);

            invitationInfo.setUserInfo(userInfo);
            invitationInfo.setReason(reason);
            invitationInfo.setStatus(InvitationInfo.InvitationStatus.NEW_INVITE);

            // 数据库更新
            Model.getInstance().getDbManager()
                    .getInviteTableDao()
                    .addInvitation(invitationInfo);

            // 新邀请的“红点”处理
            SpUtils.getInstance().save(SpUtils.IS_NEW_INVITE,true);

            // 发送邀请信息变化的广播
            mLBM.sendBroadcast(new Intent(ContactConst.CONTACT_INVITE_CHANGED));

        }

        // 别人同意了你的好友邀请
        @Override
        public void onFriendRequestAccepted(String hxid) {

            InvitationInfo invitationInfo = new InvitationInfo();
            invitationInfo.setUserInfo(new UserInfo(hxid));
            // 别人同意了你的邀请
            invitationInfo.setStatus(InvitationInfo.InvitationStatus.INVITE_ACCEPT_PEER);
            // 数据库更新
            Model.getInstance().getDbManager()
                    .getInviteTableDao()
                    .addInvitation(invitationInfo);

            // 新邀请“红点”处理
            SpUtils.getInstance().save(SpUtils.IS_NEW_INVITE,true);

            //发送广播
            mLBM.sendBroadcast(new Intent(ContactConst.CONTACT_INVITE_CHANGED));

        }

        // 别人拒绝了 你的好友邀请
        @Override
        public void onFriendRequestDeclined(String hxid) {
            // 红点处理
            SpUtils.getInstance().save(SpUtils.IS_NEW_INVITE,true);
            mLBM.sendBroadcast(new Intent(ContactConst.CONTACT_INVITE_CHANGED));

        }
    };


}
